{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 逻辑斯特回归示例\n",
    "\n",
    "- [逻辑斯特回归](#逻辑斯特回归)\n",
    "- [正则化后的逻辑斯特回归](#加正则化项的逻辑斯特回归)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "ename": "ImportError",
     "evalue": "No module named seaborn",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mImportError\u001b[0m                               Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-1-c57aadb0dcc3>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m     17\u001b[0m \u001b[0mget_ipython\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmagic\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34mu'matplotlib inline'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     18\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 19\u001b[1;33m \u001b[1;32mimport\u001b[0m \u001b[0mseaborn\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0msns\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     20\u001b[0m \u001b[0msns\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_context\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'notebook'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     21\u001b[0m \u001b[0msns\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_style\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'white'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mImportError\u001b[0m: No module named seaborn"
     ]
    }
   ],
   "source": [
    "# %load ../../standard_import.txt\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from scipy.optimize import minimize\n",
    "\n",
    "from sklearn.preprocessing import PolynomialFeatures\n",
    "\n",
    "pd.set_option('display.notebook_repr_html', False)\n",
    "pd.set_option('display.max_columns', None)\n",
    "pd.set_option('display.max_rows', 150)\n",
    "pd.set_option('display.max_seq_items', None)\n",
    " \n",
    "#%config InlineBackend.figure_formats = {'pdf',}\n",
    "%matplotlib inline\n",
    "\n",
    "import seaborn as sns\n",
    "sns.set_context('notebook')\n",
    "sns.set_style('white')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def loaddata(file, delimeter):\n",
    "    data = np.loadtxt(file, delimiter=delimeter)\n",
    "    print('Dimensions: ',data.shape)\n",
    "    print(data[1:6,:])\n",
    "    return(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plotData(data, label_x, label_y, label_pos, label_neg, axes=None):\n",
    "    # 获得正负样本的下标(即哪些是正样本，哪些是负样本)\n",
    "    neg = data[:,2] == 0\n",
    "    pos = data[:,2] == 1\n",
    "    \n",
    "    if axes == None:\n",
    "        axes = plt.gca()\n",
    "    axes.scatter(data[pos][:,0], data[pos][:,1], marker='+', c='k', s=60, linewidth=2, label=label_pos)\n",
    "    axes.scatter(data[neg][:,0], data[neg][:,1], c='y', s=60, label=label_neg)\n",
    "    axes.set_xlabel(label_x)\n",
    "    axes.set_ylabel(label_y)\n",
    "    axes.legend(frameon= True, fancybox = True);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 逻辑斯特回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Dimensions:  (100, 3)\n",
      "[[ 30.28671077  43.89499752   0.        ]\n",
      " [ 35.84740877  72.90219803   0.        ]\n",
      " [ 60.18259939  86.3085521    1.        ]\n",
      " [ 79.03273605  75.34437644   1.        ]\n",
      " [ 45.08327748  56.31637178   0.        ]]\n"
     ]
    }
   ],
   "source": [
    "data = loaddata('data1.txt', ',')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = np.c_[np.ones((data.shape[0],1)), data[:,0:2]]\n",
    "y = np.c_[data[:,2]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nAKB///64ceMGysvL0aZNG6Nq9fLywuXLlxEZGYkhQ4Zg9OjRAIDk5GQEBwfrd1bTaDQAgOPHj2P0\n6NFwcnICAEyfPh3BwcH65xs8eDA8PDwAVO0BkJaWhps3b+p7Q+7du4dLly7Bz8/PqHqJlIThTyQj\nQiNbcdy/fx8XLlxAx44dcePGDfTt2xcA8M477yAwMBBr164FAIwbNw5lZWX672vbtq3+72q1Wv91\n9f30yspKo2vt0qULvv32Wxw7dgzJycn4+OOPsWfPnmZ/f91zrb6gAaru+atUKsTFxfHeP5ER+L+G\nyAq8//776N+/PzZt2oR33nkHubm5AIDi4mK4u7sDAI4cOYIrV640+zkbu9Co+XhT/yY3NxdqtRqB\ngYFYvHgxbt68iaKiIowePRq7du1CQUEBgKoWe3l5OXx9fZGcnKw/vmPHDowYMaLB527fvj18fHyw\nbt06/bGcnBz9nu1E1DS2/IlkQqVSYe7cubWm+v3jH//A9evXkZ6ejh07dqBNmzaYM2cOIiIisGXL\nFkRERGDFihX49NNPMWDAAPTp06fW89V9/qa+rpadnY3nnnsOpaWlKC8vx+jRo/H6668jJCSk1r87\nf/48PvroIwBVLfVXX31VP1gwLCwML730kr63Yd26dejVqxciIiL0x7t06YJ333230fdj9erVWLly\nJSZPngxBENChQwesXLkSzs7OLXpfiZSIW/oSEREpDLv9iYiIFIbhT0REpDAMfyIiIoVh+BMRESkM\nw5+IiEhhGP5EREQKw/AnIiJSGIY/ERGRwvx/L5BUVbvdvbUAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x6c6ce8b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plotData(data, 'Exam 1 score', 'Exam 2 score', 'Pass', 'Fail')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 逻辑斯特回归假设\n",
    "#### $$ h_{\\theta}(x) = g(\\theta^{T}x)$$\n",
    "#### $$ g(z)=\\frac{1}{1+e^{−z}} $$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "#定义sigmoid函数\n",
    "def sigmoid(z):\n",
    "    return(1 / (1 + np.exp(-z)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "其实scipy包里有一个函数可以完成一样的功能:<BR>\n",
    "http://docs.scipy.org/doc/scipy/reference/generated/scipy.special.expit.html#scipy.special.expit"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 损失函数\n",
    "#### $$ J(\\theta) = \\frac{1}{m}\\sum_{i=1}^{m}\\big[-y^{(i)}\\, log\\,( h_\\theta\\,(x^{(i)}))-(1-y^{(i)})\\,log\\,(1-h_\\theta(x^{(i)}))\\big]$$\n",
    "#### 向量化的损失函数(矩阵形式)\n",
    "#### $$ J(\\theta) = \\frac{1}{m}\\big((\\,log\\,(g(X\\theta))^Ty+(\\,log\\,(1-g(X\\theta))^T(1-y)\\big)$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "#定义损失函数\n",
    "def costFunction(theta, X, y):\n",
    "    m = y.size\n",
    "    h = sigmoid(X.dot(theta))\n",
    "    \n",
    "    J = -1*(1/m)*(np.log(h).T.dot(y)+np.log(1-h).T.dot(1-y))\n",
    "               \n",
    "    if np.isnan(J[0]):\n",
    "        return(np.inf)\n",
    "    return(J[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 求偏导(梯度)\n",
    "\n",
    "#### $$ \\frac{\\delta J(\\theta)}{\\delta\\theta_{j}} = \\frac{1}{m}\\sum_{i=1}^{m} ( h_\\theta (x^{(i)})-y^{(i)})x^{(i)}_{j} $$ \n",
    "#### 向量化的偏导(梯度)\n",
    "#### $$ \\frac{\\delta J(\\theta)}{\\delta\\theta_{j}} = \\frac{1}{m} X^T(g(X\\theta)-y)$$\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "#求解梯度\n",
    "def gradient(theta, X, y):\n",
    "    m = y.size\n",
    "    h = sigmoid(X.dot(theta.reshape(-1,1)))\n",
    "    \n",
    "    grad =(1/m)*X.T.dot(h-y)\n",
    "\n",
    "    return(grad.flatten())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cost: \n",
      " 0.69314718056\n",
      "Grad: \n",
      " [ -0.1        -12.00921659 -11.26284221]\n"
     ]
    }
   ],
   "source": [
    "initial_theta = np.zeros(X.shape[1])\n",
    "cost = costFunction(initial_theta, X, y)\n",
    "grad = gradient(initial_theta, X, y)\n",
    "print('Cost: \\n', cost)\n",
    "print('Grad: \\n', grad)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 最小化损失函数(梯度下降)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "   status: 0\n",
       "      jac: array([ -1.03340955e-08,  -1.48646939e-06,   2.79249972e-07])\n",
       "  message: 'Optimization terminated successfully.'\n",
       "      fun: 0.20349770158946398\n",
       "  success: True\n",
       "        x: array([-25.16133593,   0.20623171,   0.20147164])\n",
       "     njev: 29\n",
       "     nfev: 29\n",
       "      nit: 25\n",
       " hess_inv: array([[  3.42070059e+03,  -2.74610638e+01,  -2.75463366e+01],\n",
       "       [ -2.74610638e+01,   2.34843943e-01,   2.08263560e-01],\n",
       "       [ -2.75463366e+01,   2.08263560e-01,   2.37408886e-01]])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 这里偷懒了，直接调用scipy里面的最小化损失函数的minimize函数\n",
    "res = minimize(costFunction, initial_theta, args=(X,y), method=None, jac=gradient, options={'maxiter':400})\n",
    "res"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 预测部分"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def predict(theta, X, threshold=0.5):\n",
    "    p = sigmoid(X.dot(theta.T)) >= threshold\n",
    "    return(p.astype('int'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.790429\n"
     ]
    }
   ],
   "source": [
    "# 第一门课45分，第二门课85分的同学\n",
    "# 咱们对他做个预测，拿到通过考试的概率\n",
    "sigmoid(np.array([1, 45, 85]).dot(res.x.T))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train accuracy 89.0%\n"
     ]
    }
   ],
   "source": [
    "p = predict(res.x, X) \n",
    "print('Train accuracy {}%'.format(100*sum(p == y.ravel())/p.size))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 是的，画决策边界"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x6c5ed3b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(45, 85, s=60, c='r', marker='v', label='(45, 85)')\n",
    "plotData(data, 'Exam 1 score', 'Exam 2 score', 'Pass', 'Failed')\n",
    "x1_min, x1_max = X[:,1].min(), X[:,1].max(),\n",
    "x2_min, x2_max = X[:,2].min(), X[:,2].max(),\n",
    "xx1, xx2 = np.meshgrid(np.linspace(x1_min, x1_max), np.linspace(x2_min, x2_max))\n",
    "h = sigmoid(np.c_[np.ones((xx1.ravel().shape[0],1)), xx1.ravel(), xx2.ravel()].dot(res.x))\n",
    "h = h.reshape(xx1.shape)\n",
    "plt.contour(xx1, xx2, h, [0.5], linewidths=1, colors='b');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 加正则化项的逻辑斯特回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Dimensions:  (118, 3)\n",
      "[[-0.092742  0.68494   1.      ]\n",
      " [-0.21371   0.69225   1.      ]\n",
      " [-0.375     0.50219   1.      ]\n",
      " [-0.51325   0.46564   1.      ]\n",
      " [-0.52477   0.2098    1.      ]]\n"
     ]
    }
   ],
   "source": [
    "data2 = loaddata('data2.txt', ',')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y = np.c_[data2[:,2]]\n",
    "X = data2[:,0:2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nRzIAAIDHkQwAAOBxliUDb7zxhkaPHq2rrrpKe/bsCfu67du366abbtKNN96oZcuWmRghAADeYFky\n0L9/fy1ZskTXXHNN2Nf4/X7NnTtXzz//vF5//XVt3LhR+/btMzFKAADcL82qD+7Xr58kKRAIhH3N\nrl271KdPH1166aWSpFtvvVWVlZXKzc01JUYAALzA1mMG6uvrdckllwR/zsnJ0ZEjRyyMCAAA9zG0\nMjB16lQ1Nja2e/y+++7TiBEjDPvc1tZWSdLhw4cN+wwAAOzizP3uzP0vVoYmA7/97W8T+vc5OTn6\n9NNPgz/X19crOzs74r9raGiQJJWXlyf0+QAAOElDQ4P69OkT87+zbMzAucKNGxg8eLAOHDigTz75\nRD169NDGjRu1YMGCiO83aNAgrVixQj169FBqamqywwUAwFZaW1vV0NCgQYMGxfXvfYGORvAZaOvW\nrZo7d66OHj2qjIwMDRgwQL/5zW905MgRPfroo1q6dKmk01MLf/GLXygQCGjChAmaMWOGFeECAOBa\nliUDAADAHmw9mwAAABiPZAAAAI8jGQAAwONckQywz4E5WlpaNG3aNN1444264447dOzYsZCvGzFi\nhMaOHavi4mJNmDDB5CidKZpzc968eRo1apTGjRunP//5zyZH6HyRjnFtba3y8/NVUlKikpISPfvs\nsxZE6WwPP/ywhg0bpjFjxoR9DedxYiId47jP44AL7Nu3L7B///7A5MmTA7t37w75mtbW1sANN9wQ\nOHToUODkyZOBsWPHBj766COTI3W2p556KrBs2bJAIBAILF26NPD000+HfN2IESMCzc3NZobmaNGc\nm9u2bQtMnz49EAgEAu+//37gtttusyJUx4rmGO/YsSNw5513WhShO/zpT38K/M///E9g9OjRIZ/n\nPE5cpGMc73nsispAv3799O1vfzvqfQ46deoU3OcA0ausrFRJSYkkqaSkRFu3bg35ukAgIL/fb2Zo\njhbNuVlZWani4mJJUl5eno4dOxZydU+ExvffHPn5+crIyAj7POdx4iId43i5IhmIBvscJK6pqUnd\nu3eXJPXo0UNNTU0hX+fz+TRt2jSNHz9eq1evNjNER4rm3Dxy5Ih69uzZ5jX19fWmxeh00X7/33vv\nPY0bN04zZszQRx99ZGaInsB5bI54zmNbrEAYDav2OfCacMd51qxZ7R7z+Xwh32PlypXKzs5WU1OT\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x6c5bf150>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plotData(data2, 'Microchip Test 1', 'Microchip Test 2', 'y = 1', 'y = 0')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 做一下特征映射，生成多项式特征，最高的次数为6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(118, 28)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly = PolynomialFeatures(6)\n",
    "XX = poly.fit_transform(data2[:,0:2])\n",
    "XX.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 带正则化项的损失函数\n",
    "#### $$ J(\\theta) = \\frac{1}{m}\\sum_{i=1}^{m}\\big[-y^{(i)}\\, log\\,( h_\\theta\\,(x^{(i)}))-(1-y^{(i)})\\,log\\,(1-h_\\theta(x^{(i)}))\\big] + \\frac{\\lambda}{2m}\\sum_{j=1}^{n}\\theta_{j}^{2}$$\n",
    "#### 向量化的损失函数\n",
    "#### $$ J(\\theta) = \\frac{1}{m}\\big((\\,log\\,(g(X\\theta))^Ty+(\\,log\\,(1-g(X\\theta))^T(1-y)\\big) + \\frac{\\lambda}{2m}\\sum_{j=1}^{n}\\theta_{j}^{2}$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "def costFunctionReg(theta, reg, *args):\n",
    "    m = y.size\n",
    "    h = sigmoid(XX.dot(theta))\n",
    "    \n",
    "    J = -1*(1/m)*(np.log(h).T.dot(y)+np.log(1-h).T.dot(1-y)) + (reg/(2*m))*np.sum(np.square(theta[1:]))\n",
    "    \n",
    "    if np.isnan(J[0]):\n",
    "        return(np.inf)\n",
    "    return(J[0])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 还是偏导(梯度)\n",
    "\n",
    "#### $$ \\frac{\\delta J(\\theta)}{\\delta\\theta_{j}} = \\frac{1}{m}\\sum_{i=1}^{m} ( h_\\theta (x^{(i)})-y^{(i)})x^{(i)}_{j} + \\frac{\\lambda}{m}\\theta_{j}$$ \n",
    "#### 向量化\n",
    "#### $$ \\frac{\\delta J(\\theta)}{\\delta\\theta_{j}} = \\frac{1}{m} X^T(g(X\\theta)-y) + \\frac{\\lambda}{m}\\theta_{j}$$\n",
    "##### $$\\text{Note: 要注意的是参数 } \\theta_{0} \\text{ 是不需要正则化的}$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "def gradientReg(theta, reg, *args):\n",
    "    m = y.size\n",
    "    h = sigmoid(XX.dot(theta.reshape(-1,1)))\n",
    "      \n",
    "    grad = (1/m)*XX.T.dot(h-y) + (reg/m)*np.r_[[[0]],theta[1:].reshape(-1,1)]\n",
    "        \n",
    "    return(grad.flatten())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.69314718055994529"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "initial_theta = np.zeros(XX.shape[1])\n",
    "costFunctionReg(initial_theta, 1, XX, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n6N69OwsWLODNN9/k0KFD1K5d26pji4j7Um4qN0XEespOZaen0p14sZmRI0fyu9/9jpiYmKvCzRq/\nDZ3LPalludbQn5o1a5b8t9lspqioqFL1uR7DMEhISGDkyJGltj300EP88MMPpKSkkJCQwNSpUxk1\napRN6iEirkm5eTXlpohUhLLzaspO96c78WIz4eHhzJo1iz/+8Y/X3K9v374sW7aMvLw8oHg1zvL0\n6NGDjz76CICsrCy2bt1K9+7dadasGd7e3iQlJZXse63jlGf9+vUUFBRQWFjImjVr6Natm1W/369f\nv5IhXQAXL17kwIEDABw+fJiWLVty5513MmzYsJKhXv7+/iX7i4hnU24qN0XEespOZaen0Z14qXZX\n9lyOGTPmuvvHxcVx8uRJxo4di7e3N35+fiWPBfmt//u//+Phhx9mxIgRAPz5z38mMjISgFdeeYXH\nHnuMRYsW4eXlxeTJkxkxYkSpntQrf/7ttvbt2zNp0iRycnLo1q1byTCqiho1ahS5ublMmDABk8mE\nxWJh4sSJtGrVioULF3L06FG8vLyoW7cuTzzxBABjx47l6aefZsmSJWUuMrJkyRI++OADTp06xQMP\nPICPjw9JSUlX9fSKiGtTbio3RcR6yk5lp6cyGVp+UASAOXPmEBUVZdWiIiIinky5KSJiPWWnVJWG\n04uIiIiIiIi4CN2JFxEREREREXERuhMvIiIiIiIi4iLUiBcRERERERFxEWrEi4iIiIiIiLgINeJF\nREREREREXIQa8SIiIiIiIiIuQo14ERERERERERfx/7cl0dbzgR6PAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x6c1c8790>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(1,3, sharey = True, figsize=(17,5))\n",
    "\n",
    "# 决策边界，咱们分别来看看正则化系数lambda太大太小分别会出现什么情况\n",
    "# Lambda = 0 : 就是没有正则化，这样的话，就过拟合咯\n",
    "# Lambda = 1 : 这才是正确的打开方式\n",
    "# Lambda = 100 : 卧槽，正则化项太激进，导致基本就没拟合出决策边界\n",
    "\n",
    "for i, C in enumerate([0, 1, 100]):\n",
    "    # 最优化 costFunctionReg\n",
    "    res2 = minimize(costFunctionReg, initial_theta, args=(C, XX, y), method=None, jac=gradientReg, options={'maxiter':3000})\n",
    "    \n",
    "    # 准确率\n",
    "    accuracy = 100*sum(predict(res2.x, XX) == y.ravel())/y.size    \n",
    "\n",
    "    # 对X,y的散列绘图\n",
    "    plotData(data2, 'Microchip Test 1', 'Microchip Test 2', 'y = 1', 'y = 0', axes.flatten()[i])\n",
    "    \n",
    "    # 画出决策边界\n",
    "    x1_min, x1_max = X[:,0].min(), X[:,0].max(),\n",
    "    x2_min, x2_max = X[:,1].min(), X[:,1].max(),\n",
    "    xx1, xx2 = np.meshgrid(np.linspace(x1_min, x1_max), np.linspace(x2_min, x2_max))\n",
    "    h = sigmoid(poly.fit_transform(np.c_[xx1.ravel(), xx2.ravel()]).dot(res2.x))\n",
    "    h = h.reshape(xx1.shape)\n",
    "    axes.flatten()[i].contour(xx1, xx2, h, [0.5], linewidths=1, colors='g');       \n",
    "    axes.flatten()[i].set_title('Train accuracy {}% with Lambda = {}'.format(np.round(accuracy, decimals=2), C))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
